package com.nb.sse.auth;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author lihaoyang6
 * @date 2024年07月14日 14:14
 */
@Component
public class UserContextInterceptor implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 这里假设你有一个方式来判断用户是否已登录，并且能获取到用户信息
        // 例如，你可能通过Spring Security的SecurityContextHolder来获取Authentication对象
        // 以下是一个简化的例子，实际中你可能需要根据你的认证机制来调整

        // 假设我们通过某种方式获取到了用户信息
        LoginUser user = fetchCurrentUserFromSomeWhere(request); // 这是一个假设的方法
        if (user != null) {
            UserContextHolder.setUser(user);
        }
        // 总是返回true，表示继续处理请求
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在请求处理完成后，清理ThreadLocal中的用户信息
        UserContextHolder.clear();
    }

    // fetchCurrentUserFromSomeWhere是一个假设的方法，用于从请求中获取当前用户信息
    // 在实际应用中，你可能需要根据你的认证机制来实现这个方法
    // 这里只是演示，所以返回null
    private LoginUser fetchCurrentUserFromSomeWhere(HttpServletRequest request) {
        // 这里应该有实际的逻辑来从请求中提取用户信息
        // 但由于这是一个示例，我们直接返回null（在实际中你应该返回用户对象）
        return new LoginUser(1001,"zhangsan666","张三"); // 示例中不实现具体逻辑
    }

    // postHandle方法在这个示例中未使用，但在需要时可以覆盖
}